import axios from 'axios'
import {useUserStore} from '@/stores/modules/user'
import router from '@/router'

// 使用ElMessage组件
import {ElMessage,ElLoading} from 'element-plus'


const httpRequestInstance = axios.create({
  baseURL: import.meta.env.VITE_SERVER+import.meta.env.VITE_APP_BASE_API,
  timeout: 5000
})


let loadingInstance = null

// 创建用户store，将用户信息使用pinia管理
let userStore = null

// axios请求拦截器
httpRequestInstance.interceptors.request.use(config => {
  // 加载提示框
  loadingInstance = ElLoading.service({
    text: '拼命加载中',
    background: 'rgba(0, 0, 0, 0.8)'
  })

  // // 创建用户store，将用户信息使用pinia管理
  userStore = useUserStore()

  if (userStore.profile?.token) {
    config.headers.Authorization = 'Bearer ' + userStore.profile.token
  }

  return config
}, error => {
  // 关闭加载提示
  loadingInstance.close()
  return Promise.reject(error)
})

// axios响应式拦截器
httpRequestInstance.interceptors.response.use(response => {
  // 关闭加载提示
  loadingInstance.close()
  const result = response.data
  if (result.code != 200) {
    // token错误、过期
    if (result.code == 401 || result.code == 402 || result.code == 407) {
      // ElMessage.error('账户登录已过期，请重新登录')

      // // 创建用户store，将用户信息使用pinia管理
      // const userStore = useUserStore()

      // 清空用户信息
		  userStore.clearProfile()

      // // 清空收货地址信息
      // userStore.clearDeliveryAddr()

      // // 清空订单信息
      // orderStore.clearCreateOrderParams()

      // // 清空购物车信息
      // cartStore.clearCart()

      router.push({path:'/login'})
    } else {
      ElMessage.error(result.message)
    }

    return Promise.reject(new Error(result.message || 'Error'))
  }
    
  return result
}, error => {
  // 关闭加载提示
  loadingInstance.close()
  console.log('err' + error) // for debug
  ElMessage.error(error)
  return Promise.reject(error)
})

export default httpRequestInstance
